package com.example.test.advice.第一章_java开发中常用的方法和准则.建议6_覆写变长方法也循规蹈矩;

/**
 * 1、重写方法不能缩小访问权限
 * 2、参数列表必须与被重写方法相同
 * 3、返回类型必须与被重写方法的相同或者是其子类型
 * 4、重写方法不能抛出新的异常，或者超出父类范围的异常，但可以抛出更少，更有限的异常，或者不抛异常
 */
public class Client {

    public static void main(String[] args) {
        Base base = new Sub();
        base.fun(1,1);
    }

}


class Base{
    void fun(int price,int...discount){
        System.out.println("Base......fun");
    }

    /**
     * fun方法编译之后未 void fun(int price,int[] discount);
     * 故子类的覆写是正常的，虽然表面参数类型不一样
     */
}

//子类，覆写父类方法
class Sub extends Base{
    @Override
    void fun(int price, int[] discount) {//这不是一种友好的覆写放上
        System.out.println("Sub......fun");
    }
}
